home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr26 / netprog.zip / NETPROG.TAR / ipc / mainfifofork.c < prev    next >
C/C++ Source or Header  |  1989-12-17  |  1KB  |  57 lines

  1. #include    <sys/types.h>
  2. #include    <sys/stat.h>
  3. #include    <sys/errno.h>
  4. extern int    errno;
  5.  
  6. #define    FIFO1    "/tmp/fifo.1"
  7. #define    FIFO2    "/tmp/fifo.2"
  8. #define    PERMS    0666
  9.  
  10. main()
  11. {
  12.     int    childpid, readfd, writefd;
  13.  
  14.     if ( (mknod(FIFO1, S_IFIFO | PERMS, 0) < 0) && (errno != EEXIST))
  15.         err_sys("can't create fifo 1: %s", FIFO1);
  16.     if ( (mknod(FIFO2, S_IFIFO | PERMS, 0) < 0) && (errno != EEXIST)) {
  17.         unlink(FIFO1);
  18.         err_sys("can't create fifo 2: %s", FIFO2);
  19.     }
  20.  
  21.     if ( (childpid = fork()) < 0) {
  22.         err_sys("can't fork");
  23.  
  24.     } else if (childpid > 0) {            /* parent */
  25.         if ( (writefd = open(FIFO1, 1)) < 0)
  26.             err_sys("parent: can't open write fifo");
  27.         if ( (readfd = open(FIFO2, 0)) < 0)
  28.             err_sys("parent: can't open read fifo");
  29.  
  30.         client(readfd, writefd);
  31.  
  32.         while (wait((int *) 0) != childpid)    /* wait for child */
  33.             ;
  34.  
  35.         close(readfd);
  36.         close(writefd);
  37.  
  38.         if (unlink(FIFO1) < 0)
  39.             err_sys("parent: can't unlink %s", FIFO1);
  40.         if (unlink(FIFO2) < 0)
  41.             err_sys("parent: can't unlink %s", FIFO2);
  42.         exit(0);
  43.  
  44.     } else {                /* child */
  45.         if ( (readfd = open(FIFO1, 0)) < 0)
  46.             err_sys("child: can't open read fifo");
  47.         if ( (writefd = open(FIFO2, 1)) < 0)
  48.             err_sys("child: can't open write fifo");
  49.  
  50.         server(readfd, writefd);
  51.  
  52.         close(readfd);
  53.         close(writefd);
  54.         exit(0);
  55.     }
  56. }
  57.